{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.chdir('../')\n",
    "\n",
    "import DeepPurpose.property_pred as models\n",
    "from DeepPurpose.utils import *\n",
    "from DeepPurpose.dataset import *\n",
    "\n",
    "from sklearn.metrics import mean_squared_error, roc_auc_score, average_precision_score, f1_score"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### download data by requesting to the MIT aicures team: https://www.aicures.mit.edu/forum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_rdkit_2d_normalized(fold_n, balanced):\n",
    "    \n",
    "    train = pd.read_csv('./aicures_data/train_cv/fold_'+str(fold_n)+'/train.csv')\n",
    "    dev = pd.read_csv('./aicures_data/train_cv/fold_'+str(fold_n)+'/dev.csv')\n",
    "    test = pd.read_csv('./aicures_data/train_cv/fold_'+str(fold_n)+'/test.csv')\n",
    "    \n",
    "    test_output = pd.read_csv('./aicures_data/test.csv')\n",
    "\n",
    "    if balanced:\n",
    "        # oversample balanced training\n",
    "        train = pd.concat([train[train.activity == 1].sample(n = len(train[train.activity == 0]), replace=True), train[train.activity == 0]]).sample(frac = 1).reset_index(drop = True)\n",
    "    \n",
    "    X_train = train.smiles.values\n",
    "    y_train = train.activity.values\n",
    "    X_dev = dev.smiles.values\n",
    "    y_dev = dev.activity.values\n",
    "    X_test = test.smiles.values\n",
    "    y_test = test.activity.values\n",
    "    \n",
    "    X_test_output = test_output.smiles.values\n",
    "    y_test_output = test_output.activity.values\n",
    "    \n",
    "    drug_encoding = 'rdkit_2d_normalized'\n",
    "    train = data_process(X_drug = X_train, y = y_train, \n",
    "                                    drug_encoding = drug_encoding,\n",
    "                                    split_method='no_split', \n",
    "                                    random_seed = 1)\n",
    "\n",
    "    val = data_process(X_drug = X_dev, y = y_dev, \n",
    "                                    drug_encoding = drug_encoding,\n",
    "                                    split_method='no_split', \n",
    "                                    random_seed = 1)\n",
    "\n",
    "    test = data_process(X_drug = X_test, y = y_test, \n",
    "                                    drug_encoding = drug_encoding,\n",
    "                                    split_method='no_split', \n",
    "                                    random_seed = 1)\n",
    "    \n",
    "    test_output_ = data_process(X_drug = X_test_output, y = y_test_output, \n",
    "                                    drug_encoding = drug_encoding,\n",
    "                                    split_method='no_split', \n",
    "                                    random_seed = 1)\n",
    "    \n",
    "    config = generate_config(drug_encoding = drug_encoding, \n",
    "                         cls_hidden_dims = [512], \n",
    "                         train_epoch = 20, \n",
    "                         LR = 0.001, \n",
    "                         batch_size = 128,\n",
    "                        )\n",
    "    \n",
    "    model = models.model_initialize(**config)\n",
    "    model.train(train, val, test)\n",
    "    \n",
    "    scores = model.predict(test)\n",
    "    \n",
    "    test_outputs = model.predict(test_output_)\n",
    "    \n",
    "    return roc_auc_score(test.Label.values, scores), average_precision_score(test.Label.values, scores), scores, test.Label.values, test_outputs, model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drug Property Prediction Mode...\n",
      "in total: 3330 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1694\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 202 drugs\n",
      "encoding drug...\n",
      "unique drugs: 202\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 201 drugs\n",
      "encoding drug...\n",
      "unique drugs: 201\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 238 drugs\n",
      "encoding drug...\n",
      "unique drugs: 238\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69274. Total time 0.0 hours\n",
      "Validation at Epoch 1 , AUROC: 0.92325 , AUPRC: 0.78820 , F1: 0.66666\n",
      "Training at Epoch 2 iteration 0 with loss 0.23882. Total time 0.00027 hours\n",
      "Validation at Epoch 2 , AUROC: 0.95174 , AUPRC: 0.88302 , F1: 0.66666\n",
      "Training at Epoch 3 iteration 0 with loss 0.02514. Total time 0.00055 hours\n",
      "Validation at Epoch 3 , AUROC: 0.93731 , AUPRC: 0.83336 , F1: 0.63636\n",
      "Training at Epoch 4 iteration 0 with loss 0.02911. Total time 0.00083 hours\n",
      "Validation at Epoch 4 , AUROC: 0.92515 , AUPRC: 0.81273 , F1: 0.66666\n",
      "Training at Epoch 5 iteration 0 with loss 0.03060. Total time 0.00111 hours\n",
      "Validation at Epoch 5 , AUROC: 0.93237 , AUPRC: 0.91291 , F1: 0.66666\n",
      "Training at Epoch 6 iteration 0 with loss 0.05137. Total time 0.00138 hours\n",
      "Validation at Epoch 6 , AUROC: 0.92857 , AUPRC: 0.85543 , F1: 0.66666\n",
      "Training at Epoch 7 iteration 0 with loss 0.00225. Total time 0.00166 hours\n",
      "Validation at Epoch 7 , AUROC: 0.92971 , AUPRC: 0.87462 , F1: 0.66666\n",
      "Training at Epoch 8 iteration 0 with loss 0.00147. Total time 0.00194 hours\n",
      "Validation at Epoch 8 , AUROC: 0.93085 , AUPRC: 0.89665 , F1: 0.66666\n",
      "Training at Epoch 9 iteration 0 with loss 0.00010. Total time 0.00222 hours\n",
      "Validation at Epoch 9 , AUROC: 0.92857 , AUPRC: 0.90295 , F1: 0.66666\n",
      "Training at Epoch 10 iteration 0 with loss 0.01251. Total time 0.0025 hours\n",
      "Validation at Epoch 10 , AUROC: 0.93237 , AUPRC: 0.91084 , F1: 0.66666\n",
      "Training at Epoch 11 iteration 0 with loss 0.00091. Total time 0.00277 hours\n",
      "Validation at Epoch 11 , AUROC: 0.93161 , AUPRC: 0.91725 , F1: 0.66666\n",
      "Training at Epoch 12 iteration 0 with loss 0.00059. Total time 0.00305 hours\n",
      "Validation at Epoch 12 , AUROC: 0.93161 , AUPRC: 0.91725 , F1: 0.66666\n",
      "Training at Epoch 13 iteration 0 with loss 0.00492. Total time 0.00333 hours\n",
      "Validation at Epoch 13 , AUROC: 0.93313 , AUPRC: 0.91737 , F1: 0.8\n",
      "Training at Epoch 14 iteration 0 with loss 0.00013. Total time 0.00361 hours\n",
      "Validation at Epoch 14 , AUROC: 0.93161 , AUPRC: 0.91725 , F1: 0.66666\n",
      "Training at Epoch 15 iteration 0 with loss 0.04330. Total time 0.00388 hours\n",
      "Validation at Epoch 15 , AUROC: 0.92895 , AUPRC: 0.89118 , F1: 0.8\n",
      "Training at Epoch 16 iteration 0 with loss 0.03750. Total time 0.00416 hours\n",
      "Validation at Epoch 16 , AUROC: 0.93389 , AUPRC: 0.90334 , F1: 0.66666\n",
      "Training at Epoch 17 iteration 0 with loss 0.00028. Total time 0.00444 hours\n",
      "Validation at Epoch 17 , AUROC: 0.93085 , AUPRC: 0.88569 , F1: 0.66666\n",
      "Training at Epoch 18 iteration 0 with loss 0.00109. Total time 0.00472 hours\n",
      "Validation at Epoch 18 , AUROC: 0.91717 , AUPRC: 0.79432 , F1: 0.66666\n",
      "Training at Epoch 19 iteration 0 with loss 0.02217. Total time 0.005 hours\n",
      "Validation at Epoch 19 , AUROC: 0.92097 , AUPRC: 0.82790 , F1: 0.66666\n",
      "Training at Epoch 20 iteration 0 with loss 0.00038. Total time 0.00527 hours\n",
      "Validation at Epoch 20 , AUROC: 0.92401 , AUPRC: 0.86920 , F1: 0.66666\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.786734693877551 , AUPRC: 0.30833333333333335 , F1: 0.28571428571428575\n",
      "--- Training Finished ---\n",
      "predicting...\n",
      "predicting...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 3328 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1694\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 201 drugs\n",
      "encoding drug...\n",
      "unique drugs: 201\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 202 drugs\n",
      "encoding drug...\n",
      "unique drugs: 202\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 238 drugs\n",
      "encoding drug...\n",
      "unique drugs: 238\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69474. Total time 0.0 hours\n",
      "Validation at Epoch 1 , AUROC: 0.85406 , AUPRC: 0.60252 , F1: 0.5\n",
      "Training at Epoch 2 iteration 0 with loss 0.04356. Total time 0.00027 hours\n",
      "Validation at Epoch 2 , AUROC: 0.90989 , AUPRC: 0.55642 , F1: 0.44444\n",
      "Training at Epoch 3 iteration 0 with loss 0.03576. Total time 0.00055 hours\n",
      "Validation at Epoch 3 , AUROC: 0.88197 , AUPRC: 0.54691 , F1: 0.28571\n",
      "Training at Epoch 4 iteration 0 with loss 0.00807. Total time 0.00083 hours\n",
      "Validation at Epoch 4 , AUROC: 0.91624 , AUPRC: 0.56724 , F1: 0.57142\n",
      "Training at Epoch 5 iteration 0 with loss 0.00628. Total time 0.00111 hours\n",
      "Validation at Epoch 5 , AUROC: 0.90355 , AUPRC: 0.55926 , F1: 0.57142\n",
      "Training at Epoch 6 iteration 0 with loss 0.00150. Total time 0.00138 hours\n",
      "Validation at Epoch 6 , AUROC: 0.90736 , AUPRC: 0.55586 , F1: 0.5\n",
      "Training at Epoch 7 iteration 0 with loss 0.00048. Total time 0.00166 hours\n",
      "Validation at Epoch 7 , AUROC: 0.89847 , AUPRC: 0.55615 , F1: 0.57142\n",
      "Training at Epoch 8 iteration 0 with loss 0.00031. Total time 0.00194 hours\n",
      "Validation at Epoch 8 , AUROC: 0.90101 , AUPRC: 0.55882 , F1: 0.57142\n",
      "Training at Epoch 9 iteration 0 with loss 0.00031. Total time 0.00222 hours\n",
      "Validation at Epoch 9 , AUROC: 0.89340 , AUPRC: 0.56315 , F1: 0.4\n",
      "Training at Epoch 10 iteration 0 with loss 0.03239. Total time 0.0025 hours\n",
      "Validation at Epoch 10 , AUROC: 0.83375 , AUPRC: 0.52796 , F1: 0.19047\n",
      "Training at Epoch 11 iteration 0 with loss 0.06973. Total time 0.00277 hours\n",
      "Validation at Epoch 11 , AUROC: 0.91116 , AUPRC: 0.56078 , F1: 0.44444\n",
      "Training at Epoch 12 iteration 0 with loss 0.01153. Total time 0.00305 hours\n",
      "Validation at Epoch 12 , AUROC: 0.90101 , AUPRC: 0.57619 , F1: 0.44444\n",
      "Training at Epoch 13 iteration 0 with loss 0.00029. Total time 0.00333 hours\n",
      "Validation at Epoch 13 , AUROC: 0.90862 , AUPRC: 0.56895 , F1: 0.4\n",
      "Training at Epoch 14 iteration 0 with loss 0.00047. Total time 0.00361 hours\n",
      "Validation at Epoch 14 , AUROC: 0.89340 , AUPRC: 0.56655 , F1: 0.57142\n",
      "Training at Epoch 15 iteration 0 with loss 0.00038. Total time 0.00388 hours\n",
      "Validation at Epoch 15 , AUROC: 0.86421 , AUPRC: 0.53624 , F1: 0.5\n",
      "Training at Epoch 16 iteration 0 with loss 0.00155. Total time 0.00416 hours\n",
      "Validation at Epoch 16 , AUROC: 0.85659 , AUPRC: 0.53948 , F1: 0.5\n",
      "Training at Epoch 17 iteration 0 with loss 0.00069. Total time 0.00444 hours\n",
      "Validation at Epoch 17 , AUROC: 0.86167 , AUPRC: 0.54098 , F1: 0.44444\n",
      "Training at Epoch 18 iteration 0 with loss 0.03124. Total time 0.00472 hours\n",
      "Validation at Epoch 18 , AUROC: 0.86675 , AUPRC: 0.54047 , F1: 0.5\n",
      "Training at Epoch 19 iteration 0 with loss 9.74849. Total time 0.005 hours\n",
      "Validation at Epoch 19 , AUROC: 0.83756 , AUPRC: 0.53142 , F1: 0.5\n",
      "Training at Epoch 20 iteration 0 with loss 0.03619. Total time 0.00527 hours\n",
      "Validation at Epoch 20 , AUROC: 0.84898 , AUPRC: 0.53471 , F1: 0.5\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.9300911854103343 , AUPRC: 0.8839490341591182 , F1: 0.6666666666666666\n",
      "--- Training Finished ---\n",
      "predicting...\n",
      "predicting...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 3308 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1694\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 202 drugs\n",
      "encoding drug...\n",
      "unique drugs: 202\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 201 drugs\n",
      "encoding drug...\n",
      "unique drugs: 201\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 238 drugs\n",
      "encoding drug...\n",
      "unique drugs: 238\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69331. Total time 0.0 hours\n",
      "Validation at Epoch 1 , AUROC: 0.67676 , AUPRC: 0.09521 , F1: 0.19047\n",
      "Training at Epoch 2 iteration 0 with loss 0.17267. Total time 0.0 hours\n",
      "Validation at Epoch 2 , AUROC: 0.80934 , AUPRC: 0.13829 , F1: 0.28571\n",
      "Training at Epoch 3 iteration 0 with loss 0.00816. Total time 0.00027 hours\n",
      "Validation at Epoch 3 , AUROC: 0.81313 , AUPRC: 0.09637 , F1: 0.0\n",
      "Training at Epoch 4 iteration 0 with loss 0.00168. Total time 0.00055 hours\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/kexinhuang/torch-env/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Validation at Epoch 4 , AUROC: 0.79924 , AUPRC: 0.09149 , F1: 0.0\n",
      "Training at Epoch 5 iteration 0 with loss 0.00439. Total time 0.00083 hours\n",
      "Validation at Epoch 5 , AUROC: 0.79671 , AUPRC: 0.12293 , F1: 0.0\n",
      "Training at Epoch 6 iteration 0 with loss 0.00029. Total time 0.00111 hours\n",
      "Validation at Epoch 6 , AUROC: 0.81439 , AUPRC: 0.12665 , F1: 0.0\n",
      "Training at Epoch 7 iteration 0 with loss 0.00062. Total time 0.00138 hours\n",
      "Validation at Epoch 7 , AUROC: 0.81691 , AUPRC: 0.12738 , F1: 0.0\n",
      "Training at Epoch 8 iteration 0 with loss 0.00085. Total time 0.00166 hours\n",
      "Validation at Epoch 8 , AUROC: 0.80555 , AUPRC: 0.12527 , F1: 0.0\n",
      "Training at Epoch 9 iteration 0 with loss 0.00112. Total time 0.00194 hours\n",
      "Validation at Epoch 9 , AUROC: 0.82702 , AUPRC: 0.12991 , F1: 0.0\n",
      "Training at Epoch 10 iteration 0 with loss 0.00191. Total time 0.00222 hours\n",
      "Validation at Epoch 10 , AUROC: 0.75631 , AUPRC: 0.11793 , F1: 0.0\n",
      "Training at Epoch 11 iteration 0 with loss 0.00016. Total time 0.0025 hours\n",
      "Validation at Epoch 11 , AUROC: 0.83333 , AUPRC: 0.17269 , F1: 0.25\n",
      "Training at Epoch 12 iteration 0 with loss 0.00084. Total time 0.00277 hours\n",
      "Validation at Epoch 12 , AUROC: 0.81944 , AUPRC: 0.16909 , F1: 0.0\n",
      "Training at Epoch 13 iteration 0 with loss 0.00071. Total time 0.00305 hours\n",
      "Validation at Epoch 13 , AUROC: 0.83838 , AUPRC: 0.17430 , F1: 0.0\n",
      "Training at Epoch 14 iteration 0 with loss 9.26663. Total time 0.00333 hours\n",
      "Validation at Epoch 14 , AUROC: 0.82070 , AUPRC: 0.29412 , F1: 0.0\n",
      "Training at Epoch 15 iteration 0 with loss 0.00055. Total time 0.00361 hours\n",
      "Validation at Epoch 15 , AUROC: 0.82575 , AUPRC: 0.17036 , F1: 0.25\n",
      "Training at Epoch 16 iteration 0 with loss 0.00019. Total time 0.00388 hours\n",
      "Validation at Epoch 16 , AUROC: 0.76641 , AUPRC: 0.16015 , F1: 0.0\n",
      "Training at Epoch 17 iteration 0 with loss 0.00148. Total time 0.00416 hours\n",
      "Validation at Epoch 17 , AUROC: 0.77525 , AUPRC: 0.12387 , F1: 0.0\n",
      "Training at Epoch 18 iteration 0 with loss 0.01140. Total time 0.00444 hours\n",
      "Validation at Epoch 18 , AUROC: 0.71464 , AUPRC: 0.34934 , F1: 0.11428\n",
      "Training at Epoch 19 iteration 0 with loss 0.15305. Total time 0.00472 hours\n",
      "Validation at Epoch 19 , AUROC: 0.78914 , AUPRC: 0.37127 , F1: 0.30769\n",
      "Training at Epoch 20 iteration 0 with loss 0.00319. Total time 0.005 hours\n",
      "Validation at Epoch 20 , AUROC: 0.79166 , AUPRC: 0.17731 , F1: 0.0\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.7817258883248731 , AUPRC: 0.5596320346320347 , F1: 0.6666666666666666\n",
      "--- Training Finished ---\n",
      "predicting...\n",
      "predicting...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 3312 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1694\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 201 drugs\n",
      "encoding drug...\n",
      "unique drugs: 201\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 202 drugs\n",
      "encoding drug...\n",
      "unique drugs: 202\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 238 drugs\n",
      "encoding drug...\n",
      "unique drugs: 238\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69032. Total time 0.0 hours\n",
      "Validation at Epoch 1 , AUROC: 0.97521 , AUPRC: 0.76465 , F1: 0.36363\n",
      "Training at Epoch 2 iteration 0 with loss 0.19188. Total time 0.00027 hours\n",
      "Validation at Epoch 2 , AUROC: 0.90769 , AUPRC: 0.81440 , F1: 0.76923\n",
      "Training at Epoch 3 iteration 0 with loss 0.00026. Total time 0.00027 hours\n",
      "Validation at Epoch 3 , AUROC: 0.97435 , AUPRC: 0.86111 , F1: 0.5\n",
      "Training at Epoch 4 iteration 0 with loss 0.04637. Total time 0.00055 hours\n",
      "Validation at Epoch 4 , AUROC: 0.95811 , AUPRC: 0.75694 , F1: 0.66666\n",
      "Training at Epoch 5 iteration 0 with loss 0.04164. Total time 0.00083 hours\n",
      "Validation at Epoch 5 , AUROC: 0.92393 , AUPRC: 0.78170 , F1: 0.61538\n",
      "Training at Epoch 6 iteration 0 with loss 0.00054. Total time 0.00111 hours\n",
      "Validation at Epoch 6 , AUROC: 0.94273 , AUPRC: 0.78511 , F1: 0.66666\n",
      "Training at Epoch 7 iteration 0 with loss 0.00058. Total time 0.00138 hours\n",
      "Validation at Epoch 7 , AUROC: 0.92051 , AUPRC: 0.78125 , F1: 0.66666\n",
      "Training at Epoch 8 iteration 0 with loss 0.00110. Total time 0.00166 hours\n",
      "Validation at Epoch 8 , AUROC: 0.94957 , AUPRC: 0.80158 , F1: 0.76923\n",
      "Training at Epoch 9 iteration 0 with loss 0.00049. Total time 0.00194 hours\n",
      "Validation at Epoch 9 , AUROC: 0.91452 , AUPRC: 0.84276 , F1: 0.90909\n",
      "Training at Epoch 10 iteration 0 with loss 0.14076. Total time 0.00222 hours\n",
      "Validation at Epoch 10 , AUROC: 0.99059 , AUPRC: 0.89215 , F1: 0.625\n",
      "Training at Epoch 11 iteration 0 with loss 0.00475. Total time 0.0025 hours\n",
      "Validation at Epoch 11 , AUROC: 0.97692 , AUPRC: 0.83680 , F1: 0.76923\n",
      "Training at Epoch 12 iteration 0 with loss 0.00122. Total time 0.00277 hours\n",
      "Validation at Epoch 12 , AUROC: 0.97521 , AUPRC: 0.86190 , F1: 0.66666\n",
      "Training at Epoch 13 iteration 0 with loss 0.03427. Total time 0.00305 hours\n",
      "Validation at Epoch 13 , AUROC: 0.97094 , AUPRC: 0.85833 , F1: 0.76923\n",
      "Training at Epoch 14 iteration 0 with loss 0.00013. Total time 0.00333 hours\n",
      "Validation at Epoch 14 , AUROC: 0.97094 , AUPRC: 0.85833 , F1: 0.8\n",
      "Training at Epoch 15 iteration 0 with loss 0.00067. Total time 0.00361 hours\n",
      "Validation at Epoch 15 , AUROC: 0.96239 , AUPRC: 0.85333 , F1: 0.8\n",
      "Training at Epoch 16 iteration 0 with loss 0.00039. Total time 0.00416 hours\n",
      "Validation at Epoch 16 , AUROC: 0.93589 , AUPRC: 0.84567 , F1: 0.90909\n",
      "Training at Epoch 17 iteration 0 with loss 0.00060. Total time 0.00444 hours\n",
      "Validation at Epoch 17 , AUROC: 0.95128 , AUPRC: 0.84920 , F1: 0.625\n",
      "Training at Epoch 18 iteration 0 with loss 0.00015. Total time 0.00472 hours\n",
      "Validation at Epoch 18 , AUROC: 0.92136 , AUPRC: 0.84353 , F1: 0.90909\n",
      "Training at Epoch 19 iteration 0 with loss 0.00027. Total time 0.005 hours\n",
      "Validation at Epoch 19 , AUROC: 0.92051 , AUPRC: 0.84343 , F1: 0.8\n",
      "Training at Epoch 20 iteration 0 with loss 0.00037. Total time 0.00527 hours\n",
      "Validation at Epoch 20 , AUROC: 0.92136 , AUPRC: 0.84353 , F1: 0.90909\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.8585858585858586 , AUPRC: 0.30511593669488407 , F1: 0.4\n",
      "--- Training Finished ---\n",
      "predicting...\n",
      "predicting...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 3312 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1695\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 201 drugs\n",
      "encoding drug...\n",
      "unique drugs: 201\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 201 drugs\n",
      "encoding drug...\n",
      "unique drugs: 201\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 238 drugs\n",
      "encoding drug...\n",
      "unique drugs: 238\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69429. Total time 0.0 hours\n",
      "Validation at Epoch 1 , AUROC: 0.78451 , AUPRC: 0.67430 , F1: 0.25\n",
      "Training at Epoch 2 iteration 0 with loss 0.06585. Total time 0.0 hours\n",
      "Validation at Epoch 2 , AUROC: 0.77946 , AUPRC: 0.50757 , F1: 0.5\n",
      "Training at Epoch 3 iteration 0 with loss 0.00289. Total time 0.00027 hours\n",
      "Validation at Epoch 3 , AUROC: 0.72895 , AUPRC: 0.50617 , F1: 0.22222\n",
      "Training at Epoch 4 iteration 0 with loss 0.04012. Total time 0.00055 hours\n",
      "Validation at Epoch 4 , AUROC: 0.67003 , AUPRC: 0.35701 , F1: 0.5\n",
      "Training at Epoch 5 iteration 0 with loss 0.00177. Total time 0.00083 hours\n",
      "Validation at Epoch 5 , AUROC: 0.72727 , AUPRC: 0.39110 , F1: 0.5\n",
      "Training at Epoch 6 iteration 0 with loss 0.00053. Total time 0.00111 hours\n",
      "Validation at Epoch 6 , AUROC: 0.76936 , AUPRC: 0.42412 , F1: 0.4\n",
      "Training at Epoch 7 iteration 0 with loss 0.01767. Total time 0.00138 hours\n",
      "Validation at Epoch 7 , AUROC: 0.72558 , AUPRC: 0.37342 , F1: 0.4\n",
      "Training at Epoch 8 iteration 0 with loss 6.00854. Total time 0.00166 hours\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Validation at Epoch 8 , AUROC: 0.74747 , AUPRC: 0.40689 , F1: 0.4\n",
      "Training at Epoch 9 iteration 0 with loss 0.00117. Total time 0.00194 hours\n",
      "Validation at Epoch 9 , AUROC: 0.74242 , AUPRC: 0.45102 , F1: 0.30769\n",
      "Training at Epoch 10 iteration 0 with loss 0.00168. Total time 0.00222 hours\n",
      "Validation at Epoch 10 , AUROC: 0.75589 , AUPRC: 0.39191 , F1: 0.4\n",
      "Training at Epoch 11 iteration 0 with loss 0.00024. Total time 0.0025 hours\n",
      "Validation at Epoch 11 , AUROC: 0.70370 , AUPRC: 0.56117 , F1: 0.5\n",
      "Training at Epoch 12 iteration 0 with loss 0.03358. Total time 0.00277 hours\n",
      "Validation at Epoch 12 , AUROC: 0.77777 , AUPRC: 0.50751 , F1: 0.33333\n",
      "Training at Epoch 13 iteration 0 with loss 0.00314. Total time 0.00333 hours\n",
      "Validation at Epoch 13 , AUROC: 0.81986 , AUPRC: 0.47601 , F1: 0.4\n",
      "Training at Epoch 14 iteration 0 with loss 0.00023. Total time 0.00361 hours\n",
      "Validation at Epoch 14 , AUROC: 0.82154 , AUPRC: 0.47610 , F1: 0.4\n",
      "Training at Epoch 15 iteration 0 with loss 6.49103. Total time 0.00388 hours\n",
      "Validation at Epoch 15 , AUROC: 0.84511 , AUPRC: 0.38504 , F1: 0.4\n",
      "Training at Epoch 16 iteration 0 with loss 0.00034. Total time 0.00416 hours\n",
      "Validation at Epoch 16 , AUROC: 0.81313 , AUPRC: 0.41675 , F1: 0.4\n",
      "Training at Epoch 17 iteration 0 with loss 0.00066. Total time 0.00472 hours\n",
      "Validation at Epoch 17 , AUROC: 0.80134 , AUPRC: 0.37637 , F1: 0.5\n",
      "Training at Epoch 18 iteration 0 with loss 0.00022. Total time 0.005 hours\n",
      "Validation at Epoch 18 , AUROC: 0.81986 , AUPRC: 0.43809 , F1: 0.5\n",
      "Training at Epoch 19 iteration 0 with loss 9.14504. Total time 0.00527 hours\n",
      "Validation at Epoch 19 , AUROC: 0.81649 , AUPRC: 0.42610 , F1: 0.5\n",
      "Training at Epoch 20 iteration 0 with loss 8.06749. Total time 0.00555 hours\n",
      "Validation at Epoch 20 , AUROC: 0.81313 , AUPRC: 0.41675 , F1: 0.5\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.8666666666666667 , AUPRC: 0.8395061728395061 , F1: 0.8333333333333334\n",
      "--- Training Finished ---\n",
      "predicting...\n",
      "predicting...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 3154 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1618\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 278 drugs\n",
      "encoding drug...\n",
      "unique drugs: 278\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 201 drugs\n",
      "encoding drug...\n",
      "unique drugs: 201\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 238 drugs\n",
      "encoding drug...\n",
      "unique drugs: 238\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69170. Total time 0.0 hours\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/kexinhuang/torch-env/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Validation at Epoch 1 , AUROC: 0.73448 , AUPRC: 0.10810 , F1: 0.0\n",
      "Training at Epoch 2 iteration 0 with loss 0.30199. Total time 0.0 hours\n",
      "Validation at Epoch 2 , AUROC: 0.89142 , AUPRC: 0.08078 , F1: 0.0\n",
      "Training at Epoch 3 iteration 0 with loss 0.03124. Total time 0.00027 hours\n",
      "Validation at Epoch 3 , AUROC: 0.91697 , AUPRC: 0.10004 , F1: 0.0\n",
      "Training at Epoch 4 iteration 0 with loss 0.02150. Total time 0.00055 hours\n",
      "Validation at Epoch 4 , AUROC: 0.93795 , AUPRC: 0.14648 , F1: 0.0\n",
      "Training at Epoch 5 iteration 0 with loss 0.06831. Total time 0.00083 hours\n",
      "Validation at Epoch 5 , AUROC: 0.94343 , AUPRC: 0.17374 , F1: 0.0\n",
      "Training at Epoch 6 iteration 0 with loss 0.04812. Total time 0.00111 hours\n",
      "Validation at Epoch 6 , AUROC: 0.93978 , AUPRC: 0.16427 , F1: 0.0\n",
      "Training at Epoch 7 iteration 0 with loss 0.00038. Total time 0.00138 hours\n",
      "Validation at Epoch 7 , AUROC: 0.94069 , AUPRC: 0.17439 , F1: 0.0\n",
      "Training at Epoch 8 iteration 0 with loss 0.00121. Total time 0.00166 hours\n",
      "Validation at Epoch 8 , AUROC: 0.93886 , AUPRC: 0.16130 , F1: 0.0\n",
      "Training at Epoch 9 iteration 0 with loss 9.31133. Total time 0.00194 hours\n",
      "Validation at Epoch 9 , AUROC: 0.93886 , AUPRC: 0.17325 , F1: 0.0\n",
      "Training at Epoch 10 iteration 0 with loss 5.00889. Total time 0.00222 hours\n",
      "Validation at Epoch 10 , AUROC: 0.93886 , AUPRC: 0.17325 , F1: 0.0\n",
      "Training at Epoch 11 iteration 0 with loss 3.95634. Total time 0.0025 hours\n",
      "Validation at Epoch 11 , AUROC: 0.93978 , AUPRC: 0.17522 , F1: 0.0\n",
      "Training at Epoch 12 iteration 0 with loss 1.43798. Total time 0.00277 hours\n",
      "Validation at Epoch 12 , AUROC: 0.93978 , AUPRC: 0.17522 , F1: 0.0\n",
      "Training at Epoch 13 iteration 0 with loss 6.82195. Total time 0.00277 hours\n",
      "Validation at Epoch 13 , AUROC: 0.93978 , AUPRC: 0.17522 , F1: 0.0\n",
      "Training at Epoch 14 iteration 0 with loss 2.18643. Total time 0.00305 hours\n",
      "Validation at Epoch 14 , AUROC: 0.93978 , AUPRC: 0.17522 , F1: 0.0\n",
      "Training at Epoch 15 iteration 0 with loss 4.19096. Total time 0.00333 hours\n",
      "Validation at Epoch 15 , AUROC: 0.93978 , AUPRC: 0.17522 , F1: 0.0\n",
      "Training at Epoch 16 iteration 0 with loss 2.42610. Total time 0.00361 hours\n",
      "Validation at Epoch 16 , AUROC: 0.93978 , AUPRC: 0.17522 , F1: 0.0\n",
      "Training at Epoch 17 iteration 0 with loss 2.10945. Total time 0.00388 hours\n",
      "Validation at Epoch 17 , AUROC: 0.93978 , AUPRC: 0.17522 , F1: 0.0\n",
      "Training at Epoch 18 iteration 0 with loss 1.55996. Total time 0.00416 hours\n",
      "Validation at Epoch 18 , AUROC: 0.93978 , AUPRC: 0.17522 , F1: 0.0\n",
      "Training at Epoch 19 iteration 0 with loss 3.95812. Total time 0.00444 hours\n",
      "Validation at Epoch 19 , AUROC: 0.93978 , AUPRC: 0.17522 , F1: 0.0\n",
      "Training at Epoch 20 iteration 0 with loss 1.01048. Total time 0.00472 hours\n",
      "Validation at Epoch 20 , AUROC: 0.93978 , AUPRC: 0.17522 , F1: 0.0\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.7323232323232323 , AUPRC: 0.6728395061728395 , F1: 0.8\n",
      "--- Training Finished ---\n",
      "predicting...\n",
      "predicting...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 3136 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1611\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 208 drugs\n",
      "encoding drug...\n",
      "unique drugs: 208\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 278 drugs\n",
      "encoding drug...\n",
      "unique drugs: 278\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 238 drugs\n",
      "encoding drug...\n",
      "unique drugs: 238\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69294. Total time 0.0 hours\n",
      "Validation at Epoch 1 , AUROC: 0.46376 , AUPRC: 0.00892 , F1: 0.0\n",
      "Training at Epoch 2 iteration 0 with loss 0.11396. Total time 0.0 hours\n",
      "Validation at Epoch 2 , AUROC: 0.72463 , AUPRC: 0.01724 , F1: 0.0\n",
      "Training at Epoch 3 iteration 0 with loss 0.01735. Total time 0.00027 hours\n",
      "Validation at Epoch 3 , AUROC: 0.70048 , AUPRC: 0.01587 , F1: 0.0\n",
      "Training at Epoch 4 iteration 0 with loss 0.01885. Total time 0.00055 hours\n",
      "Validation at Epoch 4 , AUROC: 0.78260 , AUPRC: 0.02173 , F1: 0.0\n",
      "Training at Epoch 5 iteration 0 with loss 0.00383. Total time 0.00083 hours\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/kexinhuang/torch-env/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Validation at Epoch 5 , AUROC: 0.70531 , AUPRC: 0.01612 , F1: 0.0\n",
      "Training at Epoch 6 iteration 0 with loss 0.00257. Total time 0.00083 hours\n",
      "Validation at Epoch 6 , AUROC: 0.79227 , AUPRC: 0.02272 , F1: 0.0\n",
      "Training at Epoch 7 iteration 0 with loss 0.00023. Total time 0.00111 hours\n",
      "Validation at Epoch 7 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 8 iteration 0 with loss 0.00011. Total time 0.00138 hours\n",
      "Validation at Epoch 8 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 9 iteration 0 with loss 6.79026. Total time 0.00166 hours\n",
      "Validation at Epoch 9 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 10 iteration 0 with loss 7.42084. Total time 0.00194 hours\n",
      "Validation at Epoch 10 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 11 iteration 0 with loss 2.29539. Total time 0.00194 hours\n",
      "Validation at Epoch 11 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 12 iteration 0 with loss 3.62600. Total time 0.00222 hours\n",
      "Validation at Epoch 12 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 13 iteration 0 with loss 1.21096. Total time 0.0025 hours\n",
      "Validation at Epoch 13 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 14 iteration 0 with loss 5.60060. Total time 0.00277 hours\n",
      "Validation at Epoch 14 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 15 iteration 0 with loss 7.95650. Total time 0.00305 hours\n",
      "Validation at Epoch 15 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 16 iteration 0 with loss 8.82561. Total time 0.00333 hours\n",
      "Validation at Epoch 16 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 17 iteration 0 with loss 1.84772. Total time 0.00361 hours\n",
      "Validation at Epoch 17 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 18 iteration 0 with loss 5.05101. Total time 0.00388 hours\n",
      "Validation at Epoch 18 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 19 iteration 0 with loss 1.18884. Total time 0.00416 hours\n",
      "Validation at Epoch 19 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "Training at Epoch 20 iteration 0 with loss 5.97662. Total time 0.00444 hours\n",
      "Validation at Epoch 20 , AUROC: 0.75845 , AUPRC: 0.01960 , F1: 0.0\n",
      "--- Go for Testing ---\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/kexinhuang/torch-env/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing AUROC: 0.8467153284671532 , AUPRC: 0.33697752019669824 , F1: 0.0\n",
      "--- Training Finished ---\n",
      "predicting...\n",
      "predicting...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 3290 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1688\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 201 drugs\n",
      "encoding drug...\n",
      "unique drugs: 201\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 208 drugs\n",
      "encoding drug...\n",
      "unique drugs: 208\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 238 drugs\n",
      "encoding drug...\n",
      "unique drugs: 238\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69304. Total time 0.0 hours\n",
      "Validation at Epoch 1 , AUROC: 1.0 , AUPRC: 1.0 , F1: 0.88888\n",
      "Training at Epoch 2 iteration 0 with loss 0.19951. Total time 0.0 hours\n",
      "Validation at Epoch 2 , AUROC: 1.0 , AUPRC: 1.0 , F1: 0.85714\n",
      "Training at Epoch 3 iteration 0 with loss 0.42473. Total time 0.00027 hours\n",
      "Validation at Epoch 3 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 4 iteration 0 with loss 0.04503. Total time 0.00055 hours\n",
      "Validation at Epoch 4 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 5 iteration 0 with loss 0.01625. Total time 0.00083 hours\n",
      "Validation at Epoch 5 , AUROC: 1.0 , AUPRC: 1.0 , F1: 0.85714\n",
      "Training at Epoch 6 iteration 0 with loss 0.00074. Total time 0.00111 hours\n",
      "Validation at Epoch 6 , AUROC: 1.0 , AUPRC: 1.0 , F1: 0.85714\n",
      "Training at Epoch 7 iteration 0 with loss 0.00061. Total time 0.00138 hours\n",
      "Validation at Epoch 7 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 8 iteration 0 with loss 0.00067. Total time 0.00166 hours\n",
      "Validation at Epoch 8 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 9 iteration 0 with loss 0.00060. Total time 0.00194 hours\n",
      "Validation at Epoch 9 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 10 iteration 0 with loss 0.00113. Total time 0.00222 hours\n",
      "Validation at Epoch 10 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 11 iteration 0 with loss 0.03131. Total time 0.0025 hours\n",
      "Validation at Epoch 11 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 12 iteration 0 with loss 0.00024. Total time 0.00277 hours\n",
      "Validation at Epoch 12 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 13 iteration 0 with loss 0.00052. Total time 0.00305 hours\n",
      "Validation at Epoch 13 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 14 iteration 0 with loss 0.00031. Total time 0.00333 hours\n",
      "Validation at Epoch 14 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 15 iteration 0 with loss 6.27572. Total time 0.00361 hours\n",
      "Validation at Epoch 15 , AUROC: 1.0 , AUPRC: 1.0 , F1: 0.88888\n",
      "Training at Epoch 16 iteration 0 with loss 2.44963. Total time 0.00388 hours\n",
      "Validation at Epoch 16 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 17 iteration 0 with loss 0.00011. Total time 0.00416 hours\n",
      "Validation at Epoch 17 , AUROC: 1.0 , AUPRC: 1.0 , F1: 1.0\n",
      "Training at Epoch 18 iteration 0 with loss 3.59837. Total time 0.00444 hours\n",
      "Validation at Epoch 18 , AUROC: 1.0 , AUPRC: 1.0 , F1: 0.44444\n",
      "Training at Epoch 19 iteration 0 with loss 0.04177. Total time 0.00472 hours\n",
      "Validation at Epoch 19 , AUROC: 1.0 , AUPRC: 1.0 , F1: 0.8\n",
      "Training at Epoch 20 iteration 0 with loss 0.00308. Total time 0.005 hours\n",
      "Validation at Epoch 20 , AUROC: 1.0 , AUPRC: 1.0 , F1: 0.88888\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.7053140096618358 , AUPRC: 0.016129032258064516 , F1: 0.0\n",
      "--- Training Finished ---\n",
      "predicting...\n",
      "predicting...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 3306 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1694\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 202 drugs\n",
      "encoding drug...\n",
      "unique drugs: 202\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 201 drugs\n",
      "encoding drug...\n",
      "unique drugs: 201\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 238 drugs\n",
      "encoding drug...\n",
      "unique drugs: 238\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69015. Total time 0.0 hours\n",
      "Validation at Epoch 1 , AUROC: 0.96984 , AUPRC: 0.48333 , F1: 0.22222\n",
      "Training at Epoch 2 iteration 0 with loss 0.23405. Total time 0.0 hours\n",
      "Validation at Epoch 2 , AUROC: 0.90619 , AUPRC: 0.10573 , F1: 0.0\n",
      "Training at Epoch 3 iteration 0 with loss 0.06671. Total time 0.00027 hours\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/kexinhuang/torch-env/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Validation at Epoch 3 , AUROC: 0.70351 , AUPRC: 0.03229 , F1: 0.0\n",
      "Training at Epoch 4 iteration 0 with loss 0.00256. Total time 0.00055 hours\n",
      "Validation at Epoch 4 , AUROC: 0.85427 , AUPRC: 0.06420 , F1: 0.0\n",
      "Training at Epoch 5 iteration 0 with loss 0.00103. Total time 0.00083 hours\n",
      "Validation at Epoch 5 , AUROC: 0.82412 , AUPRC: 0.05201 , F1: 0.0\n",
      "Training at Epoch 6 iteration 0 with loss 0.01604. Total time 0.00111 hours\n",
      "Validation at Epoch 6 , AUROC: 0.77219 , AUPRC: 0.04697 , F1: 0.0\n",
      "Training at Epoch 7 iteration 0 with loss 0.00423. Total time 0.00138 hours\n",
      "Validation at Epoch 7 , AUROC: 0.80904 , AUPRC: 0.04784 , F1: 0.0\n",
      "Training at Epoch 8 iteration 0 with loss 0.00088. Total time 0.00166 hours\n",
      "Validation at Epoch 8 , AUROC: 0.86097 , AUPRC: 0.07747 , F1: 0.0\n",
      "Training at Epoch 9 iteration 0 with loss 0.00138. Total time 0.00194 hours\n",
      "Validation at Epoch 9 , AUROC: 0.69011 , AUPRC: 0.03933 , F1: 0.0\n",
      "Training at Epoch 10 iteration 0 with loss 0.00028. Total time 0.00194 hours\n",
      "Validation at Epoch 10 , AUROC: 0.69179 , AUPRC: 0.03716 , F1: 0.0\n",
      "Training at Epoch 11 iteration 0 with loss 0.00020. Total time 0.00222 hours\n",
      "Validation at Epoch 11 , AUROC: 0.70854 , AUPRC: 0.03869 , F1: 0.0\n",
      "Training at Epoch 12 iteration 0 with loss 0.00016. Total time 0.0025 hours\n",
      "Validation at Epoch 12 , AUROC: 0.78894 , AUPRC: 0.06394 , F1: 0.0\n",
      "Training at Epoch 13 iteration 0 with loss 0.00024. Total time 0.00277 hours\n",
      "Validation at Epoch 13 , AUROC: 0.70519 , AUPRC: 0.04738 , F1: 0.0\n",
      "Training at Epoch 14 iteration 0 with loss 0.00082. Total time 0.00305 hours\n",
      "Validation at Epoch 14 , AUROC: 0.77219 , AUPRC: 0.08226 , F1: 0.0\n",
      "Training at Epoch 15 iteration 0 with loss 0.00063. Total time 0.00333 hours\n",
      "Validation at Epoch 15 , AUROC: 0.77554 , AUPRC: 0.07528 , F1: 0.0\n",
      "Training at Epoch 16 iteration 0 with loss 0.00016. Total time 0.00361 hours\n",
      "Validation at Epoch 16 , AUROC: 0.76884 , AUPRC: 0.07382 , F1: 0.0\n",
      "Training at Epoch 17 iteration 0 with loss 0.00028. Total time 0.00388 hours\n",
      "Validation at Epoch 17 , AUROC: 0.75544 , AUPRC: 0.06296 , F1: 0.0\n",
      "Training at Epoch 18 iteration 0 with loss 3.27168. Total time 0.00416 hours\n",
      "Validation at Epoch 18 , AUROC: 0.76046 , AUPRC: 0.06615 , F1: 0.0\n",
      "Training at Epoch 19 iteration 0 with loss 0.00020. Total time 0.00444 hours\n",
      "Validation at Epoch 19 , AUROC: 0.75041 , AUPRC: 0.07824 , F1: 0.0\n",
      "Training at Epoch 20 iteration 0 with loss 0.05552. Total time 0.00472 hours\n",
      "Validation at Epoch 20 , AUROC: 0.83082 , AUPRC: 0.06681 , F1: 0.0\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.9961928934010151 , AUPRC: 0.8928571428571428 , F1: 0.4444444444444445\n",
      "--- Training Finished ---\n",
      "predicting...\n",
      "predicting...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 3308 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1694\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 201 drugs\n",
      "encoding drug...\n",
      "unique drugs: 201\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 202 drugs\n",
      "encoding drug...\n",
      "unique drugs: 202\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Drug Property Prediction Mode...\n",
      "in total: 238 drugs\n",
      "encoding drug...\n",
      "unique drugs: 238\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69298. Total time 0.0 hours\n",
      "Validation at Epoch 1 , AUROC: 0.80816 , AUPRC: 0.40849 , F1: 0.30769\n",
      "Training at Epoch 2 iteration 0 with loss 0.06083. Total time 0.0 hours\n",
      "Validation at Epoch 2 , AUROC: 0.83061 , AUPRC: 0.41346 , F1: 0.27272\n",
      "Training at Epoch 3 iteration 0 with loss 0.07553. Total time 0.00027 hours\n",
      "Validation at Epoch 3 , AUROC: 0.82755 , AUPRC: 0.40130 , F1: 0.28571\n",
      "Training at Epoch 4 iteration 0 with loss 0.01525. Total time 0.00055 hours\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/kexinhuang/torch-env/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Validation at Epoch 4 , AUROC: 0.85918 , AUPRC: 0.40841 , F1: 0.0\n",
      "Training at Epoch 5 iteration 0 with loss 0.00344. Total time 0.00083 hours\n",
      "Validation at Epoch 5 , AUROC: 0.82857 , AUPRC: 0.38708 , F1: 0.0\n",
      "Training at Epoch 6 iteration 0 with loss 0.00087. Total time 0.00111 hours\n",
      "Validation at Epoch 6 , AUROC: 0.83163 , AUPRC: 0.52045 , F1: 0.28571\n",
      "Training at Epoch 7 iteration 0 with loss 0.00049. Total time 0.00138 hours\n",
      "Validation at Epoch 7 , AUROC: 0.83061 , AUPRC: 0.39287 , F1: 0.0\n",
      "Training at Epoch 8 iteration 0 with loss 0.00530. Total time 0.00166 hours\n",
      "Validation at Epoch 8 , AUROC: 0.83979 , AUPRC: 0.39324 , F1: 0.0\n",
      "Training at Epoch 9 iteration 0 with loss 0.00014. Total time 0.00166 hours\n",
      "Validation at Epoch 9 , AUROC: 0.83469 , AUPRC: 0.37311 , F1: 0.0\n",
      "Training at Epoch 10 iteration 0 with loss 0.00019. Total time 0.00194 hours\n",
      "Validation at Epoch 10 , AUROC: 0.83979 , AUPRC: 0.38753 , F1: 0.0\n",
      "Training at Epoch 11 iteration 0 with loss 0.00010. Total time 0.00222 hours\n",
      "Validation at Epoch 11 , AUROC: 0.82653 , AUPRC: 0.28325 , F1: 0.0\n",
      "Training at Epoch 12 iteration 0 with loss 4.43213. Total time 0.0025 hours\n",
      "Validation at Epoch 12 , AUROC: 0.89081 , AUPRC: 0.62592 , F1: 0.33333\n",
      "Training at Epoch 13 iteration 0 with loss 0.00245. Total time 0.00277 hours\n",
      "Validation at Epoch 13 , AUROC: 0.83367 , AUPRC: 0.43921 , F1: 0.27586\n",
      "Training at Epoch 14 iteration 0 with loss 0.32932. Total time 0.00305 hours\n",
      "Validation at Epoch 14 , AUROC: 0.82448 , AUPRC: 0.32897 , F1: 0.5\n",
      "Training at Epoch 15 iteration 0 with loss 0.00070. Total time 0.00333 hours\n",
      "Validation at Epoch 15 , AUROC: 0.81938 , AUPRC: 0.41934 , F1: 0.0\n",
      "Training at Epoch 16 iteration 0 with loss 0.00099. Total time 0.00361 hours\n",
      "Validation at Epoch 16 , AUROC: 0.75612 , AUPRC: 0.22008 , F1: 0.22222\n",
      "Training at Epoch 17 iteration 0 with loss 0.00452. Total time 0.00388 hours\n",
      "Validation at Epoch 17 , AUROC: 0.87142 , AUPRC: 0.62454 , F1: 0.6\n",
      "Training at Epoch 18 iteration 0 with loss 0.00257. Total time 0.00416 hours\n",
      "Validation at Epoch 18 , AUROC: 0.88061 , AUPRC: 0.50623 , F1: 0.28571\n",
      "Training at Epoch 19 iteration 0 with loss 0.00063. Total time 0.00444 hours\n",
      "Validation at Epoch 19 , AUROC: 0.85102 , AUPRC: 0.37918 , F1: 0.0\n",
      "Training at Epoch 20 iteration 0 with loss 0.00176. Total time 0.00472 hours\n",
      "Validation at Epoch 20 , AUROC: 0.84795 , AUPRC: 0.36310 , F1: 0.28571\n",
      "--- Go for Testing ---\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/kexinhuang/torch-env/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing AUROC: 0.8944723618090452 , AUPRC: 0.17526455026455023 , F1: 0.0\n",
      "--- Training Finished ---\n",
      "predicting...\n",
      "predicting...\n",
      "ROC-Mean 0.8399\n",
      "ROC-STD 0.0852\n",
      "PRC-Mean 0.4991\n",
      "PRC-STD 0.2985\n"
     ]
    },
    {
     "data": {
      "image/png": "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uh7djfj4eDp27Ejr1q193qBfeuklWrRoQa9evdi9e7ffe/Wnx9GxY0fatGnDXXfdRVpaGuC0CMePH0/37t2ZPHkyZ86c4cEHH6Rjx460a9fOY/vevXu55ZZbiI6OJjo6mk2bNuVZ14HQqFEjWrdunedLx+HDhzl58iRdunRBRBg2bBjLli0DHD2P4cOHAzB8+HBPuojQrVs3Vq5cedE2BoT77Slct+bNK2rDySu14eSVqqpab912rbduu5Z0brxxrsLzPlvDhjOL26xCExsbq7GxsUV2/l27dhXZuQNhz549KiL6+eefq6rqTz/9pNdcc42mpKRoenq63njjjTp27FhVVR0+fLguXrxYJ06cqGPGjNHMzExVVe3atasmJyerqmq1atUKdO1rrrlGT5w4oaqqUVFR+sknn6iq6oQJE7RVq1a5HpuQkKCNGzfW48eP69mzZzUiIkL379+vhw4d8th//vx57d69uy5dulRVVQFdtGiR5xwNGzbUt956S1VVn3zySY2KitKTJ09qSkqK1q1bV1VVz58/77HvyJEj2qRJE899u+91z549OWzdu3evtmjRQvfu3aurV6/W0aNHa2Zmpl64cEFjYmL0X//6l27ZskUjIyP1zJkzeuLECW3SpInGx8fnuNdp06bprFmzPPupqamez88995wnb/jw4RoTE6MZGRmqqvrMM8/oBx98oKqqx44d02bNmunp06f1zJkzevbsWVVV/e6777R9+/Z+6/jmm2/WNm3a5NjWrFmT6//F/R3xR3Jysvbs2dOzv2HDBo2JiVFV1Zo1a/qUrVWrlufzggUL9PHHH/d7Tn+/H5xlEIV67lpXVYjZtGk/N92UkCP9yJGJ1KljAQlLMqbHYXoc/iiIHkcgaAE0O7wpSXocRpAZP361z/6IEa1JSLizmKwxCoLpcZgehz8KoscRCA0aNODgwYOe/YMHD3LVVVcBUK9ePQ4fPkz9+vU5fPgwV1xxhadcSdLjMIJAbGySp39182ZHyrJq1QqoxprTCFNMj8MX0+MITI8jEOrXr0/16tXZvHkzqsr777/vCXnvrecxf/58n1D4odTjMMdRhKSmplGu3HReeOEzLr003pOuGsuZM7nPqDFKPt56HL169fIMZHszePBgRo8ezYABAzh79qxPnluPI7fBcbcex7p16zyDyG6thoSEBMaOHUuXLl0K/YbprcfRpk0boqOjL1qPY8uWLXTo0IG//vWvAelx7Ny503Nvc+bMoU+fPtx333106dKFqKgoBg0axKlTp3z0OO6666489Tg2bNjg2Xd3F/bu3TtPe6ZOncr58+dp3bo1kZGRTJ06FYDHHnuM+fPn07lzZ7777rug6HEkJyfToEEDFi9ezMMPP0yrVlmBSd3aJAB//vOfGTVqFE2bNqVJkybceuutAEyZMoU1a9bQrFkz1qxZ4+N4S6UeR1HRokUldetxeIdV/7l727wOK3Kuu+4Ndu/+1SetNK/6Nj0OoyRQVvU4fvnlF+677z6SkpL85gdbj8NaHEEmMXEnItN9nEa5co6Eq2EYRYtbj6OssX//fmbOnBmy69ngeBDxFypk2rSbmT49p96CYYDpcQSbsqrH0bFjx5BezxxHEJk5szc9ey4A4PLLq5CaOimfI4yyjulxGOGIdVVdBN9+m4rIdCZM+CcAPXo0oWfPRvznP2PNaRiGUWoxx1FI6tWLp2VLJ9zDzJlfeNLXrh3OddfVKS6zDMMwihxzHAUkLm4DItNJSUnzpFWsaNVoGEbZwcY4AiQtLY3q1ePJzPRNtyi2hmGUNexVOUBatpzj4zSuvbYmqrHmNAzA9DjywvQ4skhPT+eee+6hadOmdOrUib179/ot99prr9GqVSsiIyMZMmSIJ5SKOwJwZGQkw4cPJyMjAzA9jhLF/v2pREQ44xX79o1HZDoikJJiAQmLE/ciz2AT6KJRd4RQ0+MoGKbHAe+++y61a9fm+++/JzExkcmTJ7No0SKfMocOHWLWrFns2rWLKlWqcPfdd5OYmMiwYcMYPnw4SUlJNG/enGnTpjF//nweeugh0+MoKVSv/v9o2PBNatR42ZOmGktmZqw5jTKI6XGYHkcw9Di89TQGDRpEUlKS34CTGRkZnD17loyMDNLS0rjqqqs4evQolSpVonnz5gD07t2bv//974DpcRS7HseoUUtz6GQY+WN6HKbHYXoc+etxtGrVSg8cOODZv/baa/XIkSM5yr3++utarVo1rVOnjt53332qqpqZmakRERGe79ATTzyhkZGRnmNMj6MYSE1No27d+BzpSUlDi8EaoyRiehymx+GPguhxaABaG8eOHWP58uXs2bOHWrVqMXjwYBYsWMDQoUNJTEzkqaeeIj09nT59+vh0s5keR4j53e/e49NPD/ikdexYny+/HFNMFhklEdPjMD0OfxREj6NBgwYcOHCABg0akJGRwYkTJ3J8P9auXUvjxo09Tn3gwIFs2rSJoUOH0qVLF4+j+vjjj32cmelxhJgbbrjK89kdkNCchpEXpsfhi+lxBKbH4a2n8eGHH9KjR48cTjEiIoLNmzeTlpaGqpKUlORpSaWkpADO7KwZM2bwyCOPeI4zPY4QUKXKH1i37gcAXnmlH5ddVpmXX+7OhQuxIZmVYIQ3psfhi+lxBMZDDz3E0aNHadq0Ka+++ipxcXGAM1W5f//+gOPUBw0a5JlokJmZyZgxzotsfHw8LVu2pHXr1tx222306NHDc27T4ygABdXjiIlZwKpVP3j2S7NGRigxPQ6jJGB6HKHR4ygzYxzffpvqiS1lGEbpxK3HUdYch+lxFAF16vyRo0d9uwruuKMFS5feW0wWGYaD6XEEF9PjCA2l3nFccYWv06hYsRzp6VOL0SKjsBRmRlFJx/Q4jKKmKIYjSv3g+N69j3s+L1w40JxGmFK5cmWOHj1aJD8CwyitqCpHjx7NdSpxYSl1LY6Mg6c59dbXtPttM9u3P0LVqlU5csRiS4U7DRo04ODBgxw5cqS4TTGMsKJy5co0aNAgqOcsNY4jbc+viEyHCuXgfCbejX9zGuFPhQoVaNy4cXGbYRgGIXYcItIP+BNQHpirqnHZ8isB7wPtgaPAPaq6N7/z7pu5FTJcXRjnM6ncL4JRTesF13jDMAwDCKHjEJHywJtAb+AgkCwiK1R1l1exh4BjqtpURO4FZgD35HXeH3+sneU0gNqv3UTFNnV4I8AQ2YZhGEbBCGWL4wbge1X9EUBEEoHbAW/HcTvwvOvzh8BsERHNY0Q040J5qFiOS4e1oOrgpkgFZ7y/qBaiGYZhlHVCtnJcRAYB/VR1lGv/AaCTqj7uVeZrV5mDrv0fXGVSs51rDOAOJhUJfB2CWwgH6gCp+ZYqG1hdZGF1kYXVRRYtVLV6YQ4MZYvD3wT87F4rkDKo6jvAOwAisqWwy+ZLG1YXWVhdZGF1kYXVRRYisqWwx4ZyHcdB4Bqv/QZA9uDxnjIicglQE/g1JNYZhmEYARFKx5EMNBORxiJSEbgXWJGtzApguOvzIGBdXuMbhmEYRugJWVeVqmaIyOPAapzpuO+p6jci8gKOhOEK4F3gAxH5HqelEUgwqYuTWCtdWF1kYXWRhdVFFlYXWRS6LsI+rLphGIYRWkp9rCrDMAwjuJjjMAzDMApE2DgOEeknIrtF5HsRmeInv5KILHLlfyEijUJvZWgIoC7Gi8guEfm3iCSJSMPisDMU5FcXXuUGiYiKSKmdihlIXYjI3a7vxjci8r+htjFUBPAbiRCR9SKy3fU76V8cdhY1IvKeiKS41sj5yxcRmeWqp3+LSE4NZH+oaonfcAbTfwCuBSoCXwHXZyvzGDDH9fleYFFx212MddEdqOr6/GhZrgtXuerABmAz0KG47S7G70UzYDtQ27V/RXHbXYx18Q7wqOvz9cDe4ra7iOrid0A08HUu+f2Bj3DW0HUGvgjkvOHS4vCEK1HVc4A7XIk3twPzXZ8/BHpKaVP9cci3LlR1vaqmuXY346yZKY0E8r0AeBH4I/BbKI0LMYHUxWjgTVU9BqCqKSG2MVQEUhcK1HB9rknONWWlAlXdQN5r4W4H3leHzUAtEamf33nDxXFcDRzw2j/oSvNbRlUzgBNA4Nqb4UMgdeHNQzhvFKWRfOtCRNoB16jqylAaVgwE8r1oDjQXkY0istkVrbo0EkhdPA8MFZGDwCodFZDJAAAHoklEQVRgXGhMK3EU9HkChI8eR9DClZQCAr5PERkKdAC6FqlFxUeedSEi5YDXgBGhMqgYCeR7cQlOd1U3nFbopyISqarHi9i2UBNIXQwB5qnqTBHpgrN+LFJVM4vevBJFoZ6b4dLisHAlWQRSF4hIL+A5YICqpofItlCTX11UxwmC+YmI7MXpw11RSgfIA/2NLFfV86q6B9iN40hKG4HUxUPA3wBU9XOgMk4AxLJGQM+T7ISL47BwJVnkWxeu7pm3cZxGae3HhnzqQlVPqGodVW2kqo1wxnsGqGqhg7uVYAL5jSzDmTiBiNTB6br6MaRWhoZA6mI/0BNARFriOI6yqEu8Ahjmml3VGTihqofzOygsuqq06MKVhB0B1kU8cCmw2DU/YL+qDig2o4uIAOuiTBBgXawG+ojILuACMFFVjxaf1UVDgHXxNPAXEXkKp2tmRGl80RSRhThdk3Vc4zmxQAUAVZ2DM77TH/geSANGBnTeUlhXhmEYRhESLl1VhmEYRgnBHIdhGIZRIMxxGIZhGAXCHIdhGIZRIMxxGIZhGAXCHIdRIhGRS1zRbO8oblsKi4g0dd1D23zKLRCRZaGyyzAuFnMcRpEgIvNcD83sW54P0VAiIn/wsuuCiOwXkXdEJFgxzvYA9YGvXdfr5bpWrWzlxlLEYVG8ru3ejrpC7ncu4HnC3qEbF485DqMoWYvz4PTe/OoCFCPf4NgVATwO3AnMC8aJVfWCqv7sCrqZV7kTIYwX1QLnfrsDx4CPXKvIDSNgzHEYRUm668HpvWUAiEh/EflMRI6LyK8i8pGItMjtRK6QCM+LyD4RSReRwyKS4JVfTkSeEZEfReSsiOwUkSEB2JjhsuuQa0XxbOBWEankOm8bEVnnOudRcYRx3OG4vfNPisgpEdkhIl1deZ6uKhFpCqxxHXbMlT7XVc7TVSUiY0XkJ1eARu/7/5uI/N1r/3YR2SYiv4nIHhF50RVeIz9SXPf7b+AloBbQ0eu8nURkjYikisgJEflURG7wOn6v6+9S1z18HwSbjDDDHIdRXFQDXsV5aHXHCXfwDxGpkEv5u4EngUdwAvMNwIlJ5OZlYBiOcNX1wAzgXSl46PCzOL+L8iJyKU7YimM4Gg934Qjj/MWrfCJOWOobgHbAC/jX/djjugfIeusf76dcIk6wvR7uBJejug1Y4NrvD7wPzAJa4QTsu9d17YAQkWpkdY+d98qqjqNrcwtOUMidOK2S2q58t5MZ6bqHzsGyyQgjiluhyrbSueF092QAp722j/IoXwPIBDq79i/BiSF0h2t/ErALuMTPsdVxHtZdsqXPBlbkcc0/ADu89lviKMdtdO0/ihP3rJpXmV4uuxq79s8A9+dy/qausm2zHVsrW7kFwDKv/X8ACV77I1x2VHTtbwKeyXaOQTgB6nK7V/e13f8LdW1f+KtTr+MEJ/jfvf7+L17lCmyTbeG7WYvDKEo2AG29tlHuDBFpJiILXV1LJ3FCOQvOWIM/FuE4iD0iMlccDXF3N0gkUAlYIyKn3RuO4l2TfGyMcpU/izPesRd4wJXXEvhKVc94ld/olQdOq2meiKwVkWdFpHk+1wuEBcBAEans2r8fWKyOmh1Ae2Batnt9H6ghInXzOfctOFKiQ3BaQcPUawxGROq5Jgh8JyIngFM4gmi5/V/cXIxNRpgRFtFxjbAlTVW/zyXv/3AeXKNxnEYmTovCb5+4qu5zPZR74YTDfg2YKo4Ij/sFKAY4lO3Qc+TNbpxurwvAT+qrXSLkFLVR77+qOlVEPsCJMNoHeF5ERqvqfArPchxN7NtE5DOcrjzvLh/BiXK6xM+x+WnQ7FFnIP47V3fVUhFpo6ru7qoFOOMeTwL7gHTgE3L5vwTJJiPMMMdhhBwRqYczTvGQqn7qSruBfMbcVPUsTjfOP0QkHkeEpjOwFcdBRKjqvwpozrk8nNsu4H4RqebV6rjZ9fc/XnZ9B3wHvC4if8Hp3/fnONxOrHxeBqnqbyKyBKel0QDnPj/zKrIdaJGH3YEyD5iK0yU3y5V2MzBGVVcBiKM/faXXMRdcW/Z7CJZNRhhgjsMoDlJx3kLHiMhhnIdjPE6rwy8i8qDr45c44wr34Qzqfq+qJ0TkNeA1ESkPfIozZtIFxzHMLaSdH+C8Rc8XkedxBq3/DPxNVfe6Bs9fBj7E6eKqD9yE00Xnj32uvzEi8hFwVlVP51J2AY5WQgvgr6rq3fKZDiwXkQPAYpwHeRTQXlWnBHpzqnpBRP4EPCMic1U1DccBPiAiW3C6BuNxWh3uY1RE9gM9RWQjzsy5Y8GyyQgPbIzDCDmqegG4B6ev/WvgDeAZfGf3ZOc4MAbnzXsncDvOAO1+V/4zOIPdk3FaAx8Dd+B0hxXWztNAX+AynBlcS3Cc0mhXkQwcZ/I+zgPXnT8hl/Ptw3nA/hH4BXg9j8uvB1KA63DNpvI6zyqcWVa9XXZ9iTN5YD8FZy5QBWcNCzgD8bVwWhD/i6MkeSDbMeNd1z7gun6wbTJKOCbkZBiGYRQIa3EYhmEYBcIch2EYhlEgzHEYhmEYBcIch2EYhlEgzHEYhmEYBcIch2EYhlEgzHEYhmEYBcIch2EYhlEg/j+DSJ12OK8A1QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAELCAYAAAAybErdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3de7gddX3v8fcnNyCBliTEIwLZ2wta0SJIilq8az1gLbR4qXSDorSxKBWOPseqUYvW6PGpBUXlkiresqtWRA8iogJeqkesSbgIIidRCeSAEAIEMAom+Z4/ZpZ79lqz1pq19qzLnvV5Pc88e81lr/WbtWfPZ37zm/mNIgIzM7OsOYMugJmZDR+Hg5mZNXA4mJlZA4eDmZk1cDiYmVmDeYMuQBn222+/GB8fH3QxzMxmlfXr198dEcvy5lUiHMbHx1m3bt2gi2FmNqtI2txsnk8rmZlZA4eDmZk1cDiYmVkDh4OZmTVwOJiZWQOHg1mFTU7C+DjMmZP8nJwcdIlstqjEpaxm1mhyElauhB07kvHNm5NxgImJwZXLZgfXHMwqatWqqWCo2bEjmW7WjsPBrKJuvbWz6WZZDgezilq+vLPpZlkOB7OKWr0a9thj+rSFC5PpZu04HMwqamIC3vKWqfGxMVizxo3RVozDwazCXvSi5OdRR8EttzgYrDiHg5mZNXA4mI2AiEGXwGYbh4NZhUnJT4eDdcrhYFZhtXAw65TDwczMGjgczMysgcPBbAS4zcE65XAwqzC3OVi3HA5mZtbA4WBmZg0cDmYjwG0O1imHg1mFuc3BuuVwMDOzBg4HMzNr0NdwkHSQpG9LuknSjZJOz1nmuZK2S7o2Hd7VzzKaVZHbHKxT8/r8eTuBN0fEBkn7AOslfSsiflq33H9GxEv6XDazynGbg3WrrzWHiLgjIjakrx8AbgIO6GcZzMysvYG1OUgaBw4HfpQz+xmSrpP0dUlPavL7KyWtk7Ru69atPSypmdnoGUg4SNob+BJwRkTcXzd7AzAWEU8BPgJ8Je89ImJNRKyIiBXLli3rbYHNZjm3OVin+h4OkuaTBMNkRFxcPz8i7o+IB9PXlwHzJe3X52KaVYLbHKxb/b5aScAngJsi4qwmyzwyXQ5JR5KUcVv/SmlmZv2+Wuko4CTgJ5KuTae9HVgOEBHnAy8DTpW0E/gN8MoIV4rNzPqpr+EQEd8HWlZ0I+KjwEf7UyKz0eDDK+uU75A2qzC3OVi3HA5mZtbA4WBWYbXTST6tZJ1yOJhVmMPBuuVwMDOzBg4HswpzjcG65XAwqzCHg3XL4WBWYQ4H65bDwWwEOCSsUw4HswpzKFi3HA5mFeZwsG45HMwqzOFg3XI4mI0Ah4R1yuFgVmEOBeuWw8GswhwO1i2Hg1mFORysWw4HsxHgkLBOORzMKsyhYN1yOJhVmMPBuuVwMKswh4N1y+FgNgIcEtYph4NZhTkUrFsOB7MKczhYtxwOZhXmcLBuORzMRoBDwjrlcDCrMIeCdauv4SDpIEnflnSTpBslnZ6zjCSdI2mTpOslPbWfZTSrEoeDdWtenz9vJ/DmiNggaR9gvaRvRcRPM8scAxycDk8Dzkt/mlmHauHgkLBO9bXmEBF3RMSG9PUDwE3AAXWLHQd8JhJXA/tK2r+f5TSrGoeDdWpgbQ6SxoHDgR/VzToAuC0zvoXGAEHSSknrJK3bunVrr4ppNqs5FKxbAwkHSXsDXwLOiIj762fn/ErDJh4RayJiRUSsWLZsWS+KaTbrORysW30PB0nzSYJhMiIuzllkC3BQZvxA4PZ+lM2sahwO1q1+X60k4BPATRFxVpPFLgFelV619HRge0Tc0bdCmlWQQ8I61e+rlY4CTgJ+IunadNrbgeUAEXE+cBnwYmATsAN4TZ/LaFYZDgXrVuFwkHQ48E7g2cC+wJHpJanvA74XEZe3e4+I+D75bQrZZQJ4Q9FymVlzDgfrVqHTSpKeCfwQ+CPg3+t+bzfw9+UXzcxmyuFg3Sra5vC/gG8ATwLeVDdvA+C7mM2GmEPCOlX0tNJTgeMjIiTVb2Z3A76W1GwIORSsW0VrDr8FFjaZtz+wvZzimFmZHA7WraLh8H3gDElzM9Nqm90pwFWllsrMSuFwsG4VPa30TuAHwHXARSTB8GpJZwFHAH/Sm+KZWRkcEtapQjWHiLiO5BLWO4FVJJejnpbOfk5E3Nyb4pnZTDgUrFuF73NIe1N9gaQ9gSXAfRGxo2clM7MZczhYtzq+Qzoifov7OjKbFRwO1q1C4SDpXW0WiYj45xLKY2Y94JCwThWtOZzZYl5ts3M4mA0Zh4J1q2iD9Jz6AVgKnAzcADyuh2U0sy45HKxbXffKGhH3Ap+RtBT4GElPqmY2RBwO1q0ynudQu8zVzIaMw8G6VUY4vATwQ5zNhphDwjpV9GqlC3MmLwCeDPwx8E9lFsrMyuFQsG4VbXN4PlNXJdX8FtgMfAj4dJmFMrNy1MLBIWGdKhQOETHe43KYWQ84FKxbZbQ5mNmQc0hYp5rWHCR1dAVSRHxv5sUxszI5FKxbrU4rfYfGdoY8Speb225BM+svh4N1q1U4PK9vpTCznnA4WLeahkNEfLefBTGz3nFIWKfcIG1WYQ4F61bhcJD0ZElnS7pM0lV1w5W9LKSZdcfhkG9yEsbHYc6c5Ofk5KBLNHyK3iH9NOC7wC3AwcD1wGJgObAF2NSj8pnZDDgcGk1OwsqVsCN9juXmzck4wMTE4Mo1bIrWHN4HXAw8ieTqpFPSG+NeSHKV0nuLvImkCyXdJemGJvOfK2m7pGvTod1DhsysAIfElFWrpoKhZseOZLpNKRoOhwJrmbq0dS5ARFxFEgzvL/g+nwKObrPMf0bEYenwnoLva2Y5HAqNbr21s+mjqmg4zAd+HRG7gXuA/TPzbibpgK+t9Ea5ezoqoZl1zeHQaPnyzqaPqqLh8HPggPT19cBrJc2RNAd4DfCrEsv0DEnXSfq6pCc1W0jSSknrJK3butU9hpvlcTg0Wr0aFi6cPm3hwmS6TSkaDl8Fnpu+fh9wDHA/cC/wN8BZJZVnAzAWEU8BPgJ8pdmCEbEmIlZExIply5aV9PFm1eSQmDIxAWvWTI0vX56MuzF6uqK9sp6ZeX2FpKcDLwUWApdHxDfLKExE3J95fZmkcyXtFxF3l/H+ZqPGoZBvYgJOPDF5vXEjLFgw2PIMo66eIR0R1wDXlFwWJD0SuDMiQtKRJDWbbWV/jtmocDi0t2vXoEswnIre53Ax8BngaxHxu24/TNLnSE5P7SdpC8kT5OYDRMT5wMuAUyXtBH4DvDLCm7dZt/zf097u3YMuwXAqWnP4I5L7HO6R9AXgsxFxdacfFhEntJn/UeCjnb6vmbXmkGjONYd8hRqkI+IQ4E9I7nU4HviBpI2S3inpMb0soJl1z6HQnsMhX+G+lSJifUScARwI/AXwY+AfgY2S/rNH5TOzGXA4tOdwyNdxr6wRsSsiLouIvyGpRdwO/GnpJTOzGXM4tOdwyNfx1UqSHgucCEwAjwXuAP615HKZWYkcEs05HPIVvVppMfDXwEnA04EdwJeBNwBX+Iois+Hk/8z2fLVSvqI1h1+RdLZ3FXAy8KWI2NHyN8xs4BwO7bnmkK9oOLwDWBsRd/SyMGZWrlo4OCSaczjkK9p9xr/0uiBm1jsOh+YcDvn8DGmzCnMotOdwyOdwMKswh0N7bpDO53AwqzCHQ3uuOeRzOJiNAIdEcw6HfA4HswpzKLTncMhXKBwkHSfpNZnxMUk/lPSApIsk7d27IppZtxwO7Tkc8hWtObwDyD6L8yySDvjWAM8Gziy3WGZWBodDew6HfEXD4bHA9QCS9gJeDLwpIt4MvB34q94Uz8zK4JCYMjkJ4+NT45dfPrCiDLWi4bAnyZPZIOmBdR5Qe270zcCjSi6XmZXAoTDd5CSsXAmbN09N+8AHkuk2XdFwuAV4Zvr6OGB9RGxPxx8BbM/7JTMbLIfDdKtWwY66XuEeeiiZbtMV7VvpAuCDkv4KOAw4NTPvGcBPyy6Ymc2cw2G6W2/tbPooK9q30ocl3U3SXfc5EfGZzOx9gE/2onBmNjPueG+65cunn1LKTrfpCj/sJyImgYYzcxHxulJLZGbWI6tXJ20O2VNLe+yRTLfpit7n8HhJR2bG95L0fklflXRa74pnZjPhGsN0ExOwZs30aaedlky36Yo2SH8UeFlmfDXwZpKrlM6W9IayC2ZmM+dwaFQfBM961mDKMeyKhsOhwA8AJM0BXgX8Y0QcAbwXWNmb4pnZTDgc2vNNcPmKhsO+wLb09eHAYuCidPw7wGPKLZaZlckh0ZzDIV/RcLgTeFz6+kXAzyPitnR8b2Bn2QUzs5lzKLTncMhXNBwuAd4v6YMkbQ1fzMz7Y+AXRd5E0oWS7pJ0Q5P5knSOpE2Srpf01ILlM7McDof2/LCffEXD4a3ApcB/JwmK92XmHctUVxrtfAo4usX8Y4CD02ElcF7B9zWzHA6H9lxzyFf0JrhfA3/XZN6fFv2wiPiepPEWixwHfCYiArha0r6S9o+IO4p+hpk1ckg053DIV/gmOABJS0i6y1hC0kB9dUTcU2J5DgBuy4xvSac5HMy64FBoz+GQr3A4SHovSXvDHpnJD0n6YES8s6TyKGda7uYtaSXpJbTLfe+7WS53n9GewyFf0TukzyB5bsNa4HnAE9Ofa4G3S3pjSeXZAhyUGT8QuD1vwYhYExErImLFsmXL8hYxG3kOh/bcIJ2vaM3h74EPR8T/yEy7GfiupAeB1wPnlFCeS4DTJH0eeBqw3e0NZjPncGjONYd8RcNhHPhak3lfY3oX3k1J+hzwXGA/SVuAfwLmA0TE+cBlJE+Z2wTsAF6T/05mVoRrDu05HPIVDYdtwJOBK3LmPYmpu6dbiogT2swPwP00mZXE4dCewyFf0fscvgz8s6STJM0HkDRP0gnAe4Av9aqAZtY9h0N7Dod8RcPhbcC1wKeBHZLuJHmm9CRwHUljtZkNKYdDcw6HfEVvgntA0rOBPweeRXKfwz3Ad4Gvp6eDzGzIuObQnq9WytfJk+CCpAuNS3tXHDMrk8OhPdcc8hU9rWRms9ANaReX27fD+DhMNjzo1xwO+ZqGg6TdknYVHNxlt9mQmZyEr399anzz5uT5yQ6I6c4+G+bMcXjWa3Va6T006brCzIbfqlWws+6wbceOZLqfmTxl+/bkZy08wd8PtAiHiDizj+Uws5Ldemtn00dFq9qBw3OK2xzMKqpZf5Sj3k/lqlWt5496eNY4HMwqavVqmFd3bmDhwmT6KGu38x/18KxxOJhV1MQEvOhFU+NjY7BmjU+ZtNr5L1jg8KxxOJhV2BOfOPX6l790MEDrnf8++/g7qhn5cJicTC5h86VsVkXZm99G/Ua42v/6SSc1X+aeMp9rOct19JjQKlHOM+c2b4YTT0xe++jBqmbXruQgaBRNTiaXqe7Y0Xo5tzdMGclNJS8YsmoBYTbbZWsLo3wn8KpV7YNh/ny3N2SNZDgU8cIXDuZzfZrLypQNh8c/fnS3qyKXpx5/vM8YZDkcmrjyyv7/A9Wqvps3J//U7u7AZiobDrfdNrrbVbPTRXPnTr0+7LD+lGW2cDi0cPrp/f28vKpv7Y5NszKN2na1enVyj0fWvHmwZMlgyjMbOBxa2Fbo4aflcXcHVrZWVyiN0nY1MZHc41EzZw485zmw776DK9OwG8lwGNZL+tzdgZWt1bY+attVtj1hyRJ4whOmX701rPuFQRnJcIBkQzj11EGXYrq8qq+7O7CZaLbDG/Xtavfu5KrFbJuDTTey4QBw7rntl5Hg9a/vfVmgsep74IHu7sDKU+tn6RGP8HYVkdQaHA7NjXQ4ACxa1H6Z887r36WtExNT/8QbNoz2P7DNXLbmsHRp8vPCC0dzu8o+K3r37sZw8Gml6UY+HC64oNhy/by0tXaT3u9+15/Ps+rK7vDuvDP5+ZrXjNZlrDXZmwAdDu2NfDh0cgTV6aV/3d7Q5nCwsuTt8LZuHb37HKB9ONh0Ix8Ondi8ufiyM7mhrXYFRf0jHuvf33dSW7dG7T4HaAwHyVcrteJw6EC7PpmyZnJDW22DbVZz8J3UVsTkJHz2s83nj9J9DjC9zSGvQXqU+57K0/dwkHS0pJslbZL01pz5J0vaKunadPjbXpep1lDXTkTxHXCzf7zNm9u/R7vTSr6T2tqpHUA8+GDzZUbtPod2p5Va1dRHUV/DQdJc4GPAMcAhwAmSDslZ9AsRcVg6fLzX5frwh4svW3QH3Oofr91Rfi0cmm2svpPa2mnXC+ko3ufgcOhMv2sORwKbIuIXEfEw8HnguD6XoUEnjdJFd8B5N7TVtDvKb1dz8J3U1k6r7XTx4tG8z6FdOPi00nT9DocDgNsy41vSafVeKul6SRdJOijvjSStlLRO0rqtW7f2oqy55swp1gg8MQGvfnXz+a0at9uFg++ktnZaHSi85S2jFwzQvkHaNYfp+h0OeU269dcIfBUYj4hDgSuAT+e9UUSsiYgVEbFi2bJlMy7Y2Fix5XbtKt4IfNllzedJzX+3XTjU30ntB8dbvdWrk4fX5BnVS6TrawY+rdRav8NhC5CtCRwI3J5dICK2RcRD6ei/AUf0o2DdHHW3Oz3UqmofkdQs8gKiyKWs2SC45RYHg003MQHHNTlh+/DD/S3LsHA4dKbf4fBj4GBJj5a0AHglcEl2AUn7Z0aPBW7qR8EmJjq7VLWmVQC0awPYtWt67aN278K99ybj3/xm5+Uxq2n28BqHQ8JtDq31NRwiYidwGvANkp3+f0TEjZLeI+nYdLE3SrpR0nXAG4GT+1W+VteEN9MqAIrURmq1j+y9CzXnnNP81JM3ZGun2cGOTyslXHNore/3OUTEZRHx+Ih4bESsTqe9KyIuSV+/LSKeFBFPiYjnRcTP+lW2Tk/NtGsEnpgodnv+rbfmX3r40ENw4on5jd/ekK2dZuHgmkPiX/4FLr54atz/U9P5DumMTnteLdIIXCQcli9vfXoqr/F7VI/+rDjXHKbL3iENcN9908c3buxfWWYDh0PGlVeW91619oP6o7T6K0hqtY927RP1jd8+yrF2XHOYrt2p2Ouu6085ZguHwww0u5Q1r/2g5vDDp15nL0FdvRoWLGj9ednaxage/VlxrjlM1y4cduxwh5ZZDocZaHYpa6uuCzZsmHqdvQR1YgJOOqn152VrF9mag3uTtDzNwmHjxtHcAbYLh/nz3aFllsMh4wUv6Px38toKWrUf5J0Oqh2tfOITzX+vvvE7+z6jeprAWmsWDuvXj+YOsF047NrlDi2zHA4ZV1zR+e/k3elcpI+jWkN1q1NQNfV3QE9OwqGHTs1/1KNG45/bOtMsHOp3kjt2wOmn9748g9YuHOobrGs6eY5LlTgcZmj3bnjta6fvnFt1uldTC4d2vWfC9NNPk5PJYx6zV1rcc09ySsoBMVwGff66k3thtm2r/vbT7b1Brbq6qTKHQwkefnj6kVd930dZta4xauHQaTfbq1blNyhGwOtel7we9E7JhuOBTJ1e0Vb12kO34RAxmqeWHA515nT5jWzbNn282f0PB6U9S9XCodNutltVcX/96+HYKdlwPJCp03Co34arZia9CoziqSWHQ53a0fdMNdsZ33NP8rMWDkVOQWXfs13/T8OwUxpW/axRDcMDmXwvzHQzCYdRPLXkcKhz7rnd/+7rXz/1utnO+IEHkp+1cGh1CqqmtlGuWtX6stU5c4ZjpzSM+l2jGoYHMnUTDlXeAc4kHEbx1JLDIUfRZ0rXu+CCqdftqqHZbjVe8YrWy9Z2Yu128K973XDslIZRv2tUw/BApm7Coco7wJn2gFDk+e9V4nDI0W5n3czu3UntocgGlL065Le/bb1sbSfWagd/6qlJrWf1athjj+nz/JS4/tSosqetVq1KntexaFEyb9Ei2Guv5Kqyfl0k0E04VLmG+encx4Z1ZqTa7yJi1g9HHHFElGlsLCKpSHY3LF1abLmFCyPWro3YurX9slKy7MKFjfOOPTaZNzaWLPcHfzA1b2wsmTfqmv1Nx8bKef+8v83ChRFHHZW8XrAg/2/fS//wD51vu2V9H8NImtn/dRW/I2BdNNmvuuaQY6ZHT0Wv+qjdfNTsoSxZy5c3b594+OHk3ofa+fT770+mP+EJfkpcTa9rVM1OW11zTfK6/i722t++lw3kndYcJHjxi8stw0yUfQFBt6eL61W5djVNs9SYTcOw1RzKHvbaa/pRZtHfk0r9Wma9d7xj+tFfmUfuZRyVll2b+Lu/a/yMPfbobxm61awmNpOynXZaOf+PRWsO2dr8sNbgcc2hM8N2fv43v0ke+rPPPrDffsV/L2KEzo8WcNRRyc+DD05+nngizJuXHDGPjyftRd0eqZbR4F92A3lezeHtb0+6Y5HynzUyLJc99+ICgmbdY3RiwYJi+4dK3G/ULDVm01B2zSEiYu+9yznKGPRQpfOjM3XRRcl3MmdOse+ukyPVZu1BnQ5l1vZOOqnx/devn5rfrLYzDDXOXpStaFtgq2Hp0mKf1es2rrLgmkPnzj+/2FPcht3mzd2frx22bjhmWp7akWjRI8i8I9VmZShyv0oRZV5ynFdzmDdv6vWSJfm/12x6PzX7HpYs6X4bKOMO8FZ9UGW3jWaXss+q9opmqTGbhl7UHCKSo8GyrnAY9CBFnHpqZ+te9jnfmSijPOed1913V/uMImXIXimWHebOLfZZnfyN2jnyyMb3v/HGqfmtjqSXLi323fbivPratfllmz9/Zld9lVFzaPb9FK05zqaaQ+7E2Tb0KhwiqhMO2Y06+4/c7J+72T9SbZl+N7R1W03PlnXx4u6+s1qwFinDscc2f4+in5X9nru1dm1+IH3wg1PLtCvTggWty9BtYLfafro5PVd0h3vKKeX+L2XXtchFLMPS2J/lcJiBYbtyqcyh2c5h0aL2G3k/NvraTqTIeuTtTMtqB+hk2HPP8t5rJt9rs+9t8eL2y2SHVjveooGdDYOlS1sf/Xfz/1a0HaLbmmOroWj7VW0oWiPrF4fDDDQ7AvMwfZg7t3lNpNOaRrPTCu2G+p1psx3NvHkR++wz+O+syLBoUbFttP77bVcrGBtLakNFynDqqY1/k3Y7xVp5il7YsXRp96d9amFU/z284AVT/7tz50Y861mD/3tC8xrZIGrkDocZWrt28BtUlYb586ef3qqdsml2ZNnpMHdu8p6tdpB/9meD/x6KDq1O7+TVjubPL3ZEO3/+7D9tWjsgGEQtcSZDtnbV7GCo/mCnF+HhcCiBaw+zb2h3w9dsGxYtmh6oZTawztah1oA/Wy89b1fubK2oF6dzW4WDkvmz24oVK2LdunU9/Yx2z1EwM+uFiOQS2bzLY8fGki5yuiVpfUSsyJvX9/scJB0t6WZJmyS9NWf+HpK+kM7/kaTxfpcxz9jYoEtgZqNIan7fxObNyfx99in/PqS+hoOkucDHgGOAQ4ATJB1St9gpwL0R8TjgbOAD/SxjM508sc3MrJ8efBBOPrncgOh3zeFIYFNE/CIiHgY+DxxXt8xxQK3n9YuAF0iDP6lTuwO2rJ4dzczKtHNnuf1i9TscDgBuy4xvSaflLhMRO4HtQMMuWdJKSeskrdu6dWuPijvdxATcfXfyYB0zs2FTZvcc/Q6HvBpAfYt4kWWIiDURsSIiVixbtqyUwhV17rmwdm3SQ6OZ2bAos2+ufofDFuCgzPiBwO3NlpE0D/hD4J6+lK4DExPw0ENJLWLwJ73MbNTNm1fu4wb6HQ4/Bg6W9GhJC4BXApfULXMJ8Or09cuAq2KIr7c999ykl8/sFcgODDPrp733hk99qtynPs5rv0h5ImKnpNOAbwBzgQsj4kZJ7yG5GeMS4BPAZyVtIqkxvLKfZSzDuecmg5nZbNXXcACIiMuAy+qmvSvz+rfAy/tdLjMzm+KH/ZiZWQOHg5mZNXA4mJlZA4eDmZk1qESvrJK2Ak26pmprP+DuEoszbKq+flD9daz6+kH113FY128sInLvIq5EOMyEpHXNuqytgqqvH1R/Hau+flD9dZyN6+fTSmZm1sDhYGZmDRwOsGbQBeixqq8fVH8dq75+UP11nHXrN/JtDmZm1sg1BzMza+BwMDOzBiMbDpKOlnSzpE2S3jro8nRL0oWS7pJ0Q2baEknfkrQx/bk4nS5J56TrfL2kpw6u5MVIOkjStyXdJOlGSaen06u0jntK+i9J16Xr+O50+qMl/Shdxy+k3dwjaY90fFM6f3yQ5S9K0lxJ10i6NB2v2vrdIuknkq6VtC6dNmu305EMB0lzgY8BxwCHACdIOmSwperap4Cj66a9FbgyIg4GrkzHIVnfg9NhJXBen8o4EzuBN0fEE4GnA29I/1ZVWseHgOdHxFOAw4CjJT0d+ABwdrqO9wKnpMufAtwbEY8Dzk6Xmw1OB27KjFdt/QCeFxGHZe5pmL3baUSM3AA8A/hGZvxtwNsGXa4ZrM84cENm/GZg//T1/sDN6esLgBPylpstA/C/gT+r6joCC4ENwNNI7qidl07//TZL8jyUZ6Sv56XLadBlb7NeB5LsHJ8PXEryOODKrF9a1luA/eqmzdrtdCRrDsABwG2Z8S3ptKr4bxFxB0D68xHp9Fm93unphcOBH1GxdUxPuVwL3AV8C/g5cF9E7EwXya7H79cxnb8dWNrfEnfsQ8BbgN3p+FKqtX6QPOv+m5LWS1qZTpu122nfH/YzJPIe4jkK1/TO2vWWtDfwJeCMiLhfzZ/DOivXMSJ2AYdJ2hf4MvDEvMXSn7NqHSW9BLgrItZLem5tcs6is3L9Mo6KiNslPQL4lqSftVh26NdxVGsOW4CDMuMHArcPqCy9cKek/QHSn3el02flekuaTxIMkxFxcTq5UutYExH3Ad8haV/ZV1LtAC67Hr9fx3T+H5I8UndYHQUcK+kW4PMkp5Y+RHXWD4CIuD39eRdJwB/JLN5ORzUcfgwcnF4tsYDkOdWXDLhMZboEeHX6+tUk5+lr01+VXinxdGB7rco7rJRUET4B3BQRZ2VmVWkdl6U1BiTtBbyQpOH228DL0sXq17G27i8Dror0xO5FKsoAAARqSURBVPUwioi3RcSBETFO8r92VURMUJH1A5C0SNI+tdfAi4AbmM3b6aAbPQY1AC8G/i/Jud1Vgy7PDNbjc8AdwO9IjkZOITk/eyWwMf25JF1WJFdp/Rz4CbBi0OUvsH7PJKluXw9cmw4vrtg6Hgpck67jDcC70umPAf4L2AR8Edgjnb5nOr4pnf+YQa9DB+v6XODSqq1fui7XpcONtX3KbN5O3X2GmZk1GNXTSmZm1oLDwczMGjgczMysgcPBzMwaOBzMzKyBw8EqTdKZkiJ9vW86PrAeMCUdlpZhSc68kHTmAIpl1sDhYFX3cZJO3QD2Bf4JGGT3yIelZWgIB5Jyfry/xTHLN6p9K9mIiIgtJDcH9kR6B/f8iHh4pu8VEVeXUCSzUrjmYJVWO62U9uj6y3Tyv6XTQtLJmWWPl3S1pB2S7pP0RUnL697vFklrJb027VjtYeDP03nvlrRB0nZJd0u6Ku0aofa7JwOfTEc3Zsowns5vOK2k5KFUP5T0m/R9vyLpCXXLfEfS9yW9MP38HZJukPSXM/z6bIQ5HGxU3AEcn75+P8kpnGcAXwOQ9Pcknfv9lKQ/n9cBTwa+W+szJ+N5wJuAd5M8aOn6dPoBJA+n+UvgZJJO1r4n6dB0/teA96avX54pQ26fOpKOTn/nQeCvgVPTMn1fUn33zo8FPgycla7nHcBFkh7X8lsxa8KnlWwkRMRDkq5JR3+RPYWTdgf+AeCTEfHazPQfkfS/dQpJL6I1i4EjIuJXdZ/xt5nfnQtcTtLPzinA6RGxVdLP00WujYhNbYr9XuAXwDGRPvdA0g/TMr2ZJKBq9gOeHREb0+U2kATEK4D3tfkcswauOZglR+9/AExKmlcbSNoqfgY8u275q+uDASA9rfNtSdtIHm/6O+DxwBPql20n7dnzqcAXYuqBOETEL4EfAM+p+5WNtWBIl7uLpOayHLMuuOZgNvV0riuazL+3brzhNFB6eexlJI+4PCVdZhfJ1Ud7dlGmxSQ9d+adcvoVMFY3Le95Bw91+dlmDgczYFv682SS00D1Hqgbz+vK+KUktYXjI+J3tYmSFgP3dVGme9PPeWTOvEcyVWaznnA42Ch5KP25V930/0MSAI+LiE93+d4LSWoKvw8OSc8nOa3zy8xyzcowTUT8WtJ64OWSzozkMaJIGgP+FPhIl+U0K8ThYKPkTpIj7ldKuh74NfDLiNgm6X8CH5O0DPg6yUPtDyA5t/+diPj3Nu99OXAG8ClJnyRpa3gn8P/qlvtp+vMNkj5N0i5xfZP7JN5JcrXSpZLOBfYmuUJqO/CvHay3WcfcIG0jIyJ2A39Lcj7/CpLHxf5FOu8C4FiSxuPPkgTEu0kOoK4t8N7fAN5I8rzkS4HXAq8ieZpZdrnrgDPTz/1+WoZHNXnPy0nuodgX+A/gfJLHhz4z0ucVm/WKnwRnZmYNXHMwM7MGDgczM2vgcDAzswYOBzMza+BwMDOzBg4HMzNr4HAwM7MGDgczM2vw/wFxbrs4wCfg4wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "roc_ = []\n",
    "prc_ = []\n",
    "scores_ = []\n",
    "labels_ = []\n",
    "outputs = []\n",
    "drug_encoding = 'rdkit_2d_normalized'\n",
    "\n",
    "for i in range(10):\n",
    "    roc, prc, scores, labels, test_, model = eval('run_' + drug_encoding + '(i, True)')\n",
    "    roc_.append(roc)\n",
    "    prc_.append(prc)\n",
    "    scores_.append(scores)\n",
    "    labels_.append(labels)\n",
    "    outputs.append(test_)\n",
    "print('ROC-Mean {:.4f}'.format(np.mean(np.array(roc_))))\n",
    "print('ROC-STD {:.4f}'.format(np.std(np.array(roc_))))\n",
    "print('PRC-Mean {:.4f}'.format(np.mean(np.array(prc_))))\n",
    "print('PRC-STD {:.4f}'.format(np.std(np.array(prc_))))\n",
    "\n",
    "with open('./scores_aicures/' + drug_encoding + '_score.pkl', 'wb') as f:\n",
    "    pickle.dump(scores_, f, pickle.HIGHEST_PROTOCOL)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "outputs = np.mean(np.array([np.array(i) for i in outputs]), axis = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_output = pd.read_csv('./aicures_data/test.csv')\n",
    "test_output.activity = outputs "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_output.to_csv('./aicures_data/test_pred.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.save_model('./model')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Repurposing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from DeepPurpose import property_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = property_pred.model_pretrained('./model')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "drug_smiles, drug_names, cid = load_antiviral_drugs()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "repurposing...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 82 drugs\n",
      "encoding drug...\n",
      "unique drugs: 81\n",
      "drug encoding finished...\n",
      "Done.\n",
      "predicting...\n",
      "---------------\n",
      "Drug Repurposing Result\n",
      "+------+----------------------+-------------+-------------+\n",
      "| Rank |      Drug Name       | Interaction | Probability |\n",
      "+------+----------------------+-------------+-------------+\n",
      "|  1   |     Elvitegravir     |     YES     |     0.92    |\n",
      "|  2   |      Letermovir      |      NO     |     0.44    |\n",
      "|  3   |     Bictegravir      |      NO     |     0.39    |\n",
      "|  4   |     Dolutegravir     |      NO     |     0.26    |\n",
      "|  5   |     Ibacitabine      |      NO     |     0.13    |\n",
      "|  6   |      Cidofovir       |      NO     |     0.00    |\n",
      "|  7   |    Emtricitabine     |      NO     |     0.00    |\n",
      "|  8   |      Zanamivir       |      NO     |     0.00    |\n",
      "|  9   |      Docosanol       |      NO     |     0.00    |\n",
      "|  10  |      Vidarabine      |      NO     |     0.00    |\n",
      "checkout ./result/repurposing.txt for the whole list\n"
     ]
    }
   ],
   "source": [
    "pred = property_pred.repurpose(drug_smiles, model, drug_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
